<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="text" name="" id="ipt">

    <div style="height: 1000px;"></div>

    <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
    <script>
        /*
            1- 什么是闭包
                 闭包是指函数与其周围的状态的组合。
            2- 防抖和节流的应用场景
                 抖动（函数的抖动）
                 防抖 -短时间内一个函数被多次 出发，我们只希望出发一次（input事件，scroll事件-click）
 
             
            3- 防抖的实现-节流（大公司）--利用了闭包 */


        var ipt = document.querySelector('#ipt');
        // 用户输入结束 立刻做一个 执行一个函数 
        function fn() {
            console.log('fn');
        }



        function debounce(fn, interval) {
            let timer = null;
            return function () {
                clearTimeout(timer)//清除了上一次的定时器
                // 只要出发input事件，开启要给延时器 1000后执行 fn函数
                // 把延时器的返回值存入 全局变量中
                // ***保证了延时器短时间内多次出发 ，只执行一次
                timer = setTimeout(() => {
                    fn()
                }, interval);
            }

        }

        // newFn如果被多次调用，保证 fn只被调用一次
        var newFn = debounce(fn, 1000);
        // var newFn = _.debounce(fn, 1000)


        ipt.oninput = function () {
            console.log('input');
            newFn()
        }


    </script>

</body>

</html>